# -*- coding: utf-8 -*-
# Author   : ZhangQing
# Time     : 2025-08-04 23:26
# File     : app.py
# Project  : codebuddy_craft
# Desc     :
# frontend/app.py
import streamlit as st
import asyncio
import sys
import os

# 添加项目根目录到系统路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from frontend.components.code_editor import CodeEditor
from frontend.components.chat_interface import ChatInterface
from frontend.components.file_manager import FileManager
from frontend.components.project_sidebar import ProjectSidebar
from frontend.utils.api_client import APIClient
from frontend.utils.state_manager import StateManager


def main():
    """主应用入口"""
    
    # 页面配置
    st.set_page_config(
        page_title="CodeBuddy Craft - 智能编程助手",
        page_icon="🤖",
        layout="wide",
        initial_sidebar_state="expanded"
    )
    
    # 初始化状态管理器
    if 'state_manager' not in st.session_state:
        st.session_state.state_manager = StateManager()
    
    state_manager = st.session_state.state_manager
    
    # 初始化API客户端
    if 'api_client' not in st.session_state:
        st.session_state.api_client = APIClient()
    
    api_client = st.session_state.api_client
    
    # 主标题
    st.title("🤖 CodeBuddy Craft")
    st.markdown("*你的智能编程伙伴 - 让代码生成变得简单高效*")
    
    # 侧边栏 - 项目管理
    with st.sidebar:
        st.header("📁 项目管理")
        project_sidebar = ProjectSidebar(api_client, state_manager)
        current_project = project_sidebar.render()
    
    # 主内容区域
    if current_project:
        render_main_interface(current_project, api_client, state_manager)
    else:
        render_welcome_page(api_client, state_manager)


def render_main_interface(project, api_client, state_manager):
    """渲染主界面"""
    
    # 创建三列布局
    col1, col2, col3 = st.columns([1, 2, 1])
    
    with col1:
        st.subheader("📂 文件管理")
        file_manager = FileManager(api_client, state_manager)
        selected_file = file_manager.render(project['id'])
        
        # 当前文件信息
        if selected_file:
            st.info(f"📄 {selected_file['name']}")
            st.caption(f"大小: {selected_file.get('size', 0)} 字节")
    
    with col2:
        st.subheader("💻 代码编辑器")
        code_editor = CodeEditor(api_client, state_manager)
        
        # 渲染代码编辑器
        if selected_file:
            edited_code = code_editor.render(selected_file)
            
            # 保存按钮
            col_save, col_format, col_export = st.columns(3)
            
            with col_save:
                if st.button("💾 保存", key="save_file"):
                    success = asyncio.run(code_editor.save_file(
                        selected_file['id'], 
                        edited_code
                    ))
                    if success:
                        st.success("文件保存成功！")
                    else:
                        st.error("文件保存失败！")
            
            with col_format:
                if st.button("🎨 格式化", key="format_code"):
                    formatted_code = asyncio.run(code_editor.format_code(
                        edited_code,
                        selected_file.get('language', 'python')
                    ))
                    if formatted_code:
                        st.success("代码格式化完成！")
            
            with col_export:
                if st.button("📤 导出", key="export_file"):
                    st.download_button(
                        label="下载文件",
                        data=edited_code,
                        file_name=selected_file['name'],
                        mime="text/plain"
                    )
        else:
            st.info("👈 请在左侧选择一个文件开始编辑")
    
    with col3:
        st.subheader("💬 智能助手")
        chat_interface = ChatInterface(api_client, state_manager)
        chat_interface.render(project['id'], selected_file)


def render_welcome_page(api_client, state_manager):
    """渲染欢迎页面"""
    
    # 欢迎信息
    st.markdown("""
    ## 👋 欢迎使用 CodeBuddy Craft！
    
    CodeBuddy Craft 是您的智能编程助手，提供以下强大功能：
    
    ### ✨ 核心功能
    
    🧠 **智能代码生成**
    - 通过自然语言描述需求，AI 自动生成高质量代码
    - 支持 20+ 编程语言，包括 Python、JavaScript、Java 等
    
    🔍 **智能代码补全**
    - 基于上下文的智能补全建议
    - 理解您的编程意图，提供精准建议
    
    🐛 **多轮对话调试**
    - 描述问题，AI 帮您定位和解决代码问题
    - 支持 @文件引用，精准分析特定代码范围
    
    📁 **项目管理**
    - 支持单文件和多文件项目
    - 自动保存，云端同步
    - 一键导出项目
    
    ### 🚀 开始使用
    
    1. **创建项目**: 点击左侧"新建项目"按钮
    2. **选择技术栈**: 如 Python、JavaScript、React 等
    3. **开始编程**: 使用智能助手生成代码，享受高效编程体验！
    """)
    
    # 快速开始按钮
    col1, col2, col3 = st.columns([1, 2, 1])
    
    with col2:
        if st.button("🚀 创建我的第一个项目", key="create_first_project", type="primary"):
            state_manager.set_show_create_project_dialog(True)
    
    # 功能演示
    st.markdown("---")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown("""
        ### 📝 代码生成示例
        
        **输入**: "写一个Python函数计算斐波那契数列"
        
        **输出**:
        ```python
        def fibonacci(n):
            if n <= 1:
                return n
            return fibonacci(n-1) + fibonacci(n-2)
        ```
        """)
    
    with col2:
        st.markdown("""
        ### 🔧 智能调试示例
        
        **问题**: "这段代码运行报错 TypeError"
        
        **分析**: AI 会分析代码，指出错误原因并提供修复建议
        
        **修复**: 提供完整的修复后代码
        """)
    
    # 统计信息（示例）
    st.markdown("---")
    st.markdown("### 📊 使用统计")
    
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric(
            label="代码生成次数",
            value="1,234",
            delta="↑ 12%"
        )
    
    with col2:
        st.metric(
            label="问题解决数",
            value="567",
            delta="↑ 8%"
        )
    
    with col3:
        st.metric(
            label="项目创建数",
            value="89",
            delta="↑ 15%"
        )
    
    with col4:
        st.metric(
            label="用户满意度",
            value="98%",
            delta="↑ 2%"
        )


if __name__ == "__main__":
    main()
